const Values = require('../template')

function testValuesBasic() {
  // 1. 基本对象可枚举值获取
  console.log(
    "1. 基本对象可枚举值获取:",
    (() => {
      const obj = { a: 1, b: 2, c: 3 }
      const result = Values.values(obj)
      const sortedResult = [...result].sort((x, y) => x - y)
      return Array.isArray(result) && sortedResult.join(',') === '1,2,3'
    })()
  )

  // 2. 空对象值获取
  console.log(
    "2. 空对象值获取:",
    (() => {
      const obj = {}
      const result = Values.values(obj)
      return Array.isArray(result) && result.length === 0
    })()
  )

  // 3. 含不可枚举属性的对象（values只取可枚举）
  console.log(
    "3. 含不可枚举属性的对象（values只取可枚举）:",
    (() => {
      const obj = { a: 1 }
      Object.defineProperty(obj, 'b', { value: 2, enumerable: false })
      const result = Values.values(obj)
      return result.length === 1 && result[0] === 1
    })()
  )

  // 4. valuesAll获取所有属性（包括不可枚举）
  console.log(
    "4. valuesAll获取所有属性（包括不可枚举）:",
    (() => {
      const obj = { a: 1 }
      Object.defineProperty(obj, 'b', { value: 2, enumerable: false })
      const result = Values.valuesAll(obj)
      const sortedResult = [...result].sort((x, y) => x - y)
      return sortedResult.join(',') === '1,2'
    })()
  )

  // 5. 数组对象的值获取（values返回数组元素）
  console.log(
    "5. 数组对象的值获取（values返回数组元素）:",
    (() => {
      const arr = [10, 20, 30]
      const result = Values.values(arr)
      return Array.isArray(result) && result.join(',') === '10,20,30'
    })()
  )

  // 6. 特殊键名对象的值获取（数字、空字符串键）
  console.log(
    "6. 特殊键名对象的值获取（数字、空字符串键）:",
    (() => {
      const obj = { 0: 'zero', '': 'empty', 'key': 'value' }
      const result = Values.values(obj)
      return result.includes('zero') && result.includes('empty') && result.includes('value')
    })()
  )

  // 7. 原型链属性排除（只取自身属性）
  console.log(
    "7. 原型链属性排除（只取自身属性）:",
    (() => {
      function Parent() { this.parentVal = 'parent' }
      Parent.prototype.protoVal = 'proto'
      const child = new Parent()
      child.childVal = 'child'
      const result = Values.values(child)
      const sortedResult = [...result].sort()
      return sortedResult.join(',') === 'child,parent'
    })()
  )
}

// 执行测试
console.log("=== Values 基础测试 ===")
testValuesBasic()
console.log("=== Values 基础测试完成 ===")
